/**
 * 格式化文件大小
 * @param bytes 字节数
 * @returns 格式化后的字符串，如 "1.5 MB"
 */
export function formatFileSize(bytes: number): string {
    if (bytes === 0) return '0 B'
    if (!bytes) return '-'

    const k = 1024
    const sizes = ['B', 'KB', 'MB', 'GB', 'TB']
    const i = Math.floor(Math.log(bytes) / Math.log(k))

    return Math.round((bytes / Math.pow(k, i)) * 100) / 100 + ' ' + sizes[i]
}

/**
 * 计算存储使用百分比
 * @param used 已使用空间（字节）
 * @param total 总空间（字节）
 * @returns 百分比，如 75
 */
export function calculateStoragePercent(used: number, total: number): number {
    if (!total || total <= 0) return 0
    if (!used) return 0
    const percent = Math.round((used / total) * 100)
    return Math.min(percent, 100) // 确保不超过100%
}

/**
 * 判断存储空间是否即将用完
 * @param used 已使用空间（字节）
 * @param total 总空间（字节）
 * @param threshold 阈值百分比，默认80
 * @returns 是否即将用完
 */
export function isStorageNearLimit(used: number, total: number, threshold: number = 80): boolean {
    const percent = calculateStoragePercent(used, total)
    return percent >= threshold
}

/**
 * 获取存储空间状态
 * @param used 已使用空间（字节）
 * @param total 总空间（字节）
 * @returns 状态：normal/warning/danger
 */
export function getStorageStatus(used: number, total: number): 'normal' | 'warning' | 'danger' {
    const percent = calculateStoragePercent(used, total)
    if (percent >= 95) return 'danger'
    if (percent >= 80) return 'warning'
    return 'normal'
}

/**
 * 格式化数字，添加千位分隔符
 * @param num 数字
 * @returns 格式化后的字符串，如 "1,234,567"
 */
export function formatNumber(num: number): string {
    if (!num && num !== 0) return '-'
    return num.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ',')
}

/**
 * 格式化日期为相对时间
 * @param date 日期字符串或Date对象
 * @returns 相对时间，如 "3分钟前"、"2小时前"
 */
export function formatRelativeTime(date: string | Date): string {
    if (!date) return '-'

    const now = new Date().getTime()
    const target = new Date(date).getTime()
    const diff = now - target

    const minute = 60 * 1000
    const hour = 60 * minute
    const day = 24 * hour
    const month = 30 * day
    const year = 365 * day

    if (diff < minute) {
        return '刚刚'
    } else if (diff < hour) {
        return Math.floor(diff / minute) + '分钟前'
    } else if (diff < day) {
        return Math.floor(diff / hour) + '小时前'
    } else if (diff < month) {
        return Math.floor(diff / day) + '天前'
    } else if (diff < year) {
        return Math.floor(diff / month) + '个月前'
    } else {
        return Math.floor(diff / year) + '年前'
    }
}

/**
 * 截断文本
 * @param text 文本
 * @param maxLength 最大长度
 * @param suffix 后缀，默认为 "..."
 * @returns 截断后的文本
 */
export function truncateText(text: string, maxLength: number, suffix = '...'): string {
    if (!text) return ''
    if (text.length <= maxLength) return text
    return text.substring(0, maxLength) + suffix
}

